package dk.muldbjergskolen.gui;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;


import dk.muldbjergskolen.ctr.ElevCtr;
import dk.muldbjergskolen.ctr.KlasseCtr;
import dk.muldbjergskolen.gui.OpretAnsat.OpretAnsatListener;
import dk.muldbjergskolen.model.Elev;
import dk.muldbjergskolen.model.Klasse;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;

public class RetElev extends JDialog
{

	private final JPanel contentPanel = new JPanel();
	private JTextField textField_Fornavn;
	private JTextField textField_Efternavn;
	private JTextField textField_Adresse;
	private JTextField textField_PostNr;
	private JTextField textField_Telefon;
	private JTextField textField_Cpr;
	private JTextField textField_Email;
	private JFrame frame;
	private JComboBox<Klasse> cbKlasse;
	private JComboBox<Integer> comboBox_Id;
	private ElevCtr eC = new ElevCtr();
	private KlasseCtr kC = new KlasseCtr();

	/**
	 * Create the dialog.
	 */
	public RetElev(RetElevListener listener)
	{
		retElevListener = listener;

		setModalityType(ModalityType.APPLICATION_MODAL);
		setTitle("Ret Elev");
		setBounds(100, 100, 329, 329);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(null);

		JLabel label = new JLabel("Fornavn:");
		label.setBounds(10, 40, 80, 14);
		contentPanel.add(label);

		textField_Fornavn = new JTextField();
		textField_Fornavn.setColumns(10);
		textField_Fornavn.setBounds(100, 37, 200, 20);
		contentPanel.add(textField_Fornavn);

		JLabel label_1 = new JLabel("Efternavn:");
		label_1.setBounds(10, 68, 80, 14);
		contentPanel.add(label_1);

		textField_Efternavn = new JTextField();
		textField_Efternavn.setColumns(10);
		textField_Efternavn.setBounds(100, 65, 200, 20);
		contentPanel.add(textField_Efternavn);

		JLabel label_2 = new JLabel("Adresse:");
		label_2.setBounds(10, 96, 80, 14);
		contentPanel.add(label_2);

		textField_Adresse = new JTextField();
		textField_Adresse.setColumns(10);
		textField_Adresse.setBounds(100, 93, 200, 20);
		contentPanel.add(textField_Adresse);

		JLabel label_3 = new JLabel("Postnr:");
		label_3.setBounds(10, 124, 80, 14);
		contentPanel.add(label_3);

		textField_PostNr = new JTextField();
		textField_PostNr.setColumns(10);
		textField_PostNr.setBounds(100, 121, 200, 20);
		contentPanel.add(textField_PostNr);

		JLabel label_5 = new JLabel("Telefon:");
		label_5.setBounds(10, 152, 80, 14);
		contentPanel.add(label_5);

		textField_Telefon = new JTextField();
		textField_Telefon.setColumns(10);
		textField_Telefon.setBounds(100, 149, 200, 20);
		contentPanel.add(textField_Telefon);

		JLabel label_7 = new JLabel("Email:");
		label_7.setBounds(10, 180, 80, 14);
		contentPanel.add(label_7);

		JLabel label_8 = new JLabel("CPR:");
		label_8.setBounds(10, 208, 80, 14);
		contentPanel.add(label_8);

		textField_Cpr = new JTextField();
		textField_Cpr.setColumns(10);
		textField_Cpr.setBounds(100, 205, 200, 20);
		contentPanel.add(textField_Cpr);

		textField_Email = new JTextField();
		textField_Email.setColumns(10);
		textField_Email.setBounds(100, 177, 200, 20);
		contentPanel.add(textField_Email);

		JLabel lblKlasse = new JLabel("Klasse:");
		lblKlasse.setBounds(10, 233, 80, 14);
		contentPanel.add(lblKlasse);

		cbKlasse = new JComboBox<Klasse>();
		cbKlasse.setBounds(100, 230, 200, 20);
		contentPanel.add(cbKlasse);

		JLabel lblElev = new JLabel("Vælg elevens id:");
		lblElev.setBounds(10, 15, 80, 14);
		contentPanel.add(lblElev);

		comboBox_Id = new JComboBox<Integer>();
		comboBox_Id.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				hentData();
			}
		});
		comboBox_Id.setBounds(100, 12, 200, 20);
		contentPanel.add(comboBox_Id);
		opdaterGlId();
		opdaterKlasser();

		{
			JPanel buttonPane = new JPanel();
			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(buttonPane, BorderLayout.SOUTH);
			{
				JButton okButton = new JButton("OK");
				okButton.addActionListener(new ActionListener()
				{
					public void actionPerformed(ActionEvent e)
					{
						ret();
					}
				});
				okButton.setActionCommand("OK");
				buttonPane.add(okButton);
				getRootPane().setDefaultButton(okButton);
			}
			{
				JButton cancelButton = new JButton("Cancel");
				cancelButton.setActionCommand("Cancel");
				buttonPane.add(cancelButton);
			}
		}
	}
	
	private void opdaterKlasser()
	{
		try
		{
			cbKlasse.removeAllItems();
			ArrayList<dk.muldbjergskolen.model.Klasse> b = kC.findKlasser();

			for (int i = 0; i < b.size(); i++)
			{
				cbKlasse.addItem(b.get(i));
			}
		}

		catch (Exception e)
		{
			JOptionPane.showMessageDialog(this, "Ingen klasser blev fundet.");
		}
	}
	
	private void ret()
	{
		int id = Integer.parseInt(comboBox_Id.getSelectedItem().toString());
		
		String fornavn = textField_Fornavn.getText();
		String efternavn = textField_Efternavn.getText();
		String addresse = textField_Adresse.getText();
		int postNr = Integer.parseInt(textField_PostNr.getText());
		String tlf = textField_Telefon.getText();
		String email = textField_Email.getText();
		String cpr = textField_Cpr.getText();
		Klasse klasse = cbKlasse.getItemAt(cbKlasse.getSelectedIndex());
		Elev nyElev = new Elev(id, fornavn, efternavn, addresse, postNr, tlf, email, cpr, klasse);

		try
		{
			eC.retElev(id, nyElev);
		}
		catch (dk.muldbjergskolen.db.PersonDB.UGyldigtPostNr e)
		{
			JOptionPane.showMessageDialog(this, "Forkert post nr. Prøv igen.");
			return;
		}
		catch (Exception e)
		{
			JOptionPane.showMessageDialog(frame, "Udfyld alle Felterne");
			return;
		}
		
		OnRettetElev();
		setVisible(false);
	}
	
	//Opdatere ComboBoxen id, så den indeholder de ider der er i databasen.
	private void opdaterGlId()
	{
		try
		{
			comboBox_Id.removeAllItems();
			ArrayList<dk.muldbjergskolen.model.Elev> a = eC.findElever();
		
			for(int i = 0; i < a.size(); i++)
			{
				comboBox_Id.addItem((a.get(i).getId()));
			}
		}
		catch(Exception e)
		{
			JOptionPane.showMessageDialog(this, "Ingen Id blev fundet.");
		}
		
		hentData();
	}
	
	/**
	 * Henter elev dataene ud fra valgte id, som skal rettes.
	 */
	private void hentData()
	{
		int elevId = -1;
		
		int i = comboBox_Id.getSelectedIndex();
		if (i != -1)
			elevId = comboBox_Id.getItemAt(i);
		else
			return;
		
		// Henter elev og indsætter data i tekstfelterne.
		Elev elev = new ElevCtr().getElev(elevId);
		textField_Fornavn.setText(elev.getFornavn());
		textField_Efternavn.setText(elev.getEfternavn());
		textField_Adresse.setText(elev.getAddresse());
		textField_PostNr.setText(Integer.toString(elev.getPostNr()));
		textField_Telefon.setText(elev.getTlf());
		textField_Email.setText(elev.getEmail());
		textField_Cpr.setText(elev.getCpr());
		
		// Vælg den rigtige klasse i comboboxen.
		for (int j = 0; j < cbKlasse.getItemCount(); j++)
		{
			if (cbKlasse.getItemAt(j).getId() == elev.getKlasse().getId())
			{
				cbKlasse.setSelectedIndex(j);
				break;
			}
		}
	}
	
	
	//
	// Event håndtering.
	//

	// "Lyttere"
	RetElevListener retElevListener;

	public interface RetElevListener
	{
		void OnRettetElev();
	}

	/***
	 * Kaldes når en ny Elev er oprettet.
	 */
	private void OnRettetElev()
	{
		if (retElevListener != null)
			retElevListener.OnRettetElev();
	}
}
